package com.daohang361.imqq.decoder;

import java.util.HashMap;
import com.daohang361.imqq.Asycore.QQUser;
import com.daohang361.imqq.bean.FrindsInfor;
import com.daohang361.imqq.bean.FrindsInfor.Sex;
import com.daohang361.imqq.tool.Hex2Bytes;
import com.daohang361.imqq.tool.MyByteReciveArray;
import com.daohang361.imqq.tool.MyUtil;

/** 
 * @author naner E-mail:likun3344@163.com 
 * @create time：2011-4-28 下午08:08:52 
 * <pre>
 * 请求好友列表的应答包，格式为
 * 1. 头部
 * 2. 下一次好友列表开始位置，这个位置是你所有好友排序后的位置，如果为0xFFFF，那就是你的好友已经全部得到了
 *    每次都固定的返回50个好友，所以如果不足50个了，那么这个值一定是0xFFFF了
 * 3. 好友QQ号，4字节
 * 4. 头像，2字节
 * 5. 年龄，1字节
 * 6. 性别，1字节
 * 7. 昵称长度，1字节
 * 8. 昵称，不定字节，由7指定
 * 9. 用户标志字节，31字节
 * 10. 重复3-9的结构
 * 11.尾部
 * </pre>
 * 
 */
public class Decoder0126 extends AbstractDecoder {
	@Override
	public QQUser decode() throws Exception {
		myArray.decryptRemain(sessionQQ.getAttr("SessionKey"));
		myArray.extract(0, 9);
		String endFlag =Hex2Bytes.bytesToHexString(myArray.extract(0, 1));
		System.out.println("endFlag:"+endFlag);
		myArray.extract(0, 3);
		decryptAll=myArray.extractAll();
		boolean isEnd=false;
		if(endFlag.equalsIgnoreCase("FFFF"))
			isEnd=true;
		int firendInforCurrentPage=MyUtil.byte2Int(sessionQQ.getAttr("firendInforCurrentPage")[0]);//当前片段
	System.out.println("decode好友信息当前第"+firendInforCurrentPage+"页.");
		 addFriendsInfor(decryptAll);
		if(!isEnd)
			{
				sessionQQ.setLogintimes(sessionQQ.getLogintimes()-1);//如果不是最后一次为登陆包不前进
				System.out.println("未获取完好友");
			}else
				System.out.println("获取好友完毕");

		sessionQQ.setLogintimes(sessionQQ.getLogintimes()+1);//登陆包前进
		sessionQQ.setPakage(sessionQQ.getPakage()+1);//登陆包自动增长
		return sessionQQ;
	}
	/**
	 * 以下部分在上面已经丢弃
	 *  01 00 00 00 00 00 00 00 00 02 FF FF 00 00 00 64
	 *  以下部分为输入
		34 
		15 C4 41 D0 
		01 9E [头像]
		6D [年龄]
		00 [性别]0女 1男
		0C [昵称长度]
		E4 B8 8D E6 AD BB E7 88 AC E8 99 AB 
		01 88 02 42 07 6D 08 1C 00 41 4C 42 00 00 00 00 
		00 00 45 4C 04 24 0C 1A 04 6A 04 00 08 00 00 
		2E 
		1F 67 5F E9 
		00 ED 
		6D 
		00 
		06 
		E6 A5 A0 E5 84 BF 
		00 88 42 00 07 6E 01 01 00 00 00 31 00 00 00 00 
		00 00 00 00 04 1C 00 00 00 00 04 00 00 00 00 
		00 04 
		4D BA DA B6[ 时间：2011/4/29 23:35:18]明天的时间？
	 * @param decryptAll
	 * @return
	 */
	private void addFriendsInfor(byte[] decryptAll) 
	{
		HashMap<Integer,FrindsInfor> frindsInforMap = sessionQQ.getFrindsInforMap();
		MyByteReciveArray friendArray = new MyByteReciveArray();
		friendArray.init(decryptAll);
		while(friendArray.hasNext()&&friendArray.size()>6){
			try {
				int tempTotalLength = friendArray.extractInt(0, 0);
				if (tempTotalLength == 4)
					break;
				FrindsInfor myfriend = new FrindsInfor();
				int frindsQQ = friendArray.extractInt(0, 3);
				String face = Hex2Bytes.bytesToHexString(friendArray.extract(0, 1));
				int age = friendArray.extractInt(0, 0);
				int sex = friendArray.extractInt(0, 0);
				int tempNinamLength = friendArray.extractInt(0, 0);
				byte[] tempName = new byte[0];
				if (tempNinamLength > 0)
					tempName = friendArray.extract(0, tempNinamLength - 1);
				friendArray.extract(0, 30);
				String niname = new String(tempName, "UTF-8");
				myfriend.setFrindsQQ(frindsQQ);
				myfriend.setFace(face);
				myfriend.setSex(sex == 0 ? Sex.male : Sex.female);
				myfriend.setAge(age);
				myfriend.setNiname(niname);
				frindsInforMap.put(frindsQQ,myfriend);
				System.out.println(frindsQQ + ":"
						+ (sex == 0 ? Sex.male : Sex.female) + "年龄:" + age
						+ "昵称:" + niname+" face:"+face);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		sessionQQ.setFrindsInforMap(frindsInforMap);
	}
}
